第十讲 R-两独立样本t检验
在“R与生物统计专题”中,我们会从介绍R的基本知识展开到生物统计原理及其在R中的实现。以从浅入深,层层递进的形式在投必得医学公众号更新。
在上两讲中,我们介绍了 第九讲 R-单样本Wilcoxon检验。单样本的T检验和单样本Wilcoxon检验用于检验一组样本和理论值是否有差异。
当我们比较两组样本间是否存在差异时,就需要用到今天的统计学方法:两独立样本t检验。
两独立样本t检验用于比较的平均两个独立的组是否存在差异。
例如,假设我们测量了100个人的体重:50名女性(A组)和50名男性(B组)。我们想知道女性的平均体重(mA)与男性(mB)。在这种情况下,我们有两组不相关(即独立或不成对)的样本。因此,可以使用两独立样本t检验来评估均值是否不同。
注意,仅当数据呈正态分布时,才可以使用两独立样本t检验。可以使用Shapiro-Wilk test进行检查。(请参看第六讲 R-数据正态分布检验)同时,需要满足两组数据方差相等,即假设两组数据来自同一个大样本人群。这可以使用F-test进行检验。
1. 研究问题和统计假设
A组均值(mA)是否等于B组均值(mB)? A组均值(mA)是否小于B组均值(mB)? A组均值(mA)是否大于B组均值(mB)?
在统计数据中,我们可以定义相应的无效假设(H0) 如下:
H0:
mA = mB
H0:
mA ≤ mB
H0:
mA ≥ mB
相应的备择假设(H1)如下:
H1:
mA ≠ mB (不同)
H1:
mA > mB(大于)
H1:
mA < mB(小于)
假设1)称为双向检验
假设2)和3)称为单向检验
2. 两独立样本t检验的公式
可以使用student-t检验方法比较两组差异:
其中,
mA和mB分别是A、B两组样本均值
nA和nB分别是A、B两组样本量
s2是样本的标准差,可以由以下公式计算获得
我们可以为自由度(df)计算与t检验统计量(| t |),通过查询t分布表格对比其在df=nA+nB-2处的P值。
可以使用校正的student-t检验方法,即Welch t检验比较两组差异:
其中,
SA和SB 分别是两组A和B的标准差。
与经典的student-t检验不同,Welch t检验公式涉及两组的方差(SA2和SB2)进行比较。
而不能将其直接合并为S2。
其自由度的计算公式如下:
我们可以为自由度(df)计算与t检验统计量(| t |),通过查询t分布表格获取P值。
Welch t检验被认为是一种相对保守安全的检验方法。通常,除非组大小和标准差都非常不同,否则经典的student-t检验和Welch t检验的结果非常相似。
如果p值低于或等于显着性水平0.05,我们可以拒绝无效假设并接受备择假设。换句话说,我们得出结论,两组样本代表的总体均值间有显着差异。
3. 用R完成两独立样本t检验
可以使用R函数t.test()计算两独立样本t检验:
t.test(x, y, alternative = "two.sided", var.equal = FALSE)
x,y:
数值向量
alternative:
备择假设。
允许值为“two.sided”(默认),也可以根据需要设置为“greater”或“less”之一。
var.equal:
一个逻辑变量,指示是否将两个方差视为相等。
如果为TRUE,则使用合并的方差估计方差,否则使用Welch检验。
在这里,我们将使用一个示例数据集,其中包含18个人(9名女性和9名男性)的体重:
women_weight <- c(69.9, 64.2, 73.3, 61.8, 63.4, 65.6, 48.4, 58.8, 68.5)
men_weight <- c(67.8, 60, 63.4, 76, 89.4, 72.3, 67.3, 61.3, 61.4)
my_data <- data.frame(
group = rep(c("Woman", "Man"), each = 9),
weight = c(women_weight, men_weight)
)
我们想知道,女性的体重是否与男子的体重不同?
# 打印所有数据
print(my_data)
结果输出
group weight
1 Woman 69.9
2 Woman 64.2
3 Woman 73.3
4 Woman 61.8
5 Woman 63.4
6 Woman 65.6
7 Woman 48.4
8 Woman 58.8
9 Woman 68.5
10 Man 67.8
11 Man 60.0
12 Man 63.4
13 Man 76.0
14 Man 89.4
15 Man 72.3
16 Man 67.3
17 Man 61.3
18 Man 61.4
按性别计算统计信息(平均值和标准差)。可以使用dplyr软件包。
安装及导入dplyr软件包
install.packages("dplyr")
library(dplyr)
按性别group计算统计信息:
group_by(my_data, group) %>%
summarise(
count = n(),
mean = mean(weight, na.rm = TRUE),
sd = sd(weight, na.rm = TRUE)
)# A tibble: 2 x 4
输出结果
group count mean sd
1 Man 9 68.8 9.42
2 Woman 9 63.8 7.24
假设1:两个样本是否独立?
是的,因为来自男性和女性的样本无关。
假设2:两组中每组的数据是否服从正态分布?
使用Shapiro-Wilk正态性检验
我们将使用with()和shapiro.test()的函数来为每组样本计算Shapiro-Wilk测试。
# Shapiro-Wilk normality test for Men's weights
with(my_data, shapiro.test(weight[group == "Man"]))
# p = 0.089
# Shapiro-Wilk normality test for Women's weights
with(my_data, shapiro.test(weight[group == "Woman"]))
# p = 0.52
输出结果中,两个p值大于显着性水平0.05,说明两组数据的分布与正态分布没有显着差异。数据分部符合正态分布的假设检验成立。
如果数据不是正态分布的,建议使用非参数两样本Wilcoxon秩检验。(后面的推送会介绍)
假设3:这两个总体是否符合方差齐性?
我们将使用F检验来检验方差齐性。可以使用var.test()函数执行以下操作:
res.ftest <- var.test(weight ~ group, data = my_data)
res.ftest
输出结果
F test to compare two variances
data: weight by group
F = 1.6918, num df = 8, denom df = 8, p-value = 0.4735
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
0.3816132 7.5001461
sample estimates:
ratio of variances
1.69179
F检验为p = 0.4735 。它大于显着性水平alpha = 0.05。因此,两组数据的方差之间没有显著差异。因此我们认为男女两组方差相等(方差齐性)。
由于以上3个假设成立,因此,我们可以使用student-t检验 。
问题:男女体重之间有显着差异吗?
res <- t.test(weight ~ group, data = my_data, var.equal = TRUE)
res
输出结果
Two Sample t-test
data: weight by group
t = 1.2629, df = 16, p-value = 0.2247
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-3.392909 13.392909
sample estimates:
mean in group Man mean in group Woman
68.76667 63.76667
在上面的结果中:
t是t检验统计值(t = 1.2629),
df是自由度(df = 16),
p值是t检验的显着性水平(p值= 0.2247)。
conf.int是平均值在95%时的置信区间(conf.int = [-3.3929, 13.3929]);
样本估计值是样本的平均值(平均值= 68.7666,63.7666)。
如果要检验男性的体重是否小于女性的体重,请输入以下内容:
t.test(weight ~ group, data = my_data,var.equal = TRUE, alternative = "less")
或者,如果您想测试男性的体重是否大于女性的体重,请输入
t.test(weight ~ group, data = my_data,var.equal = TRUE, alternative = "greater"
检验的p值为 0.2247,大于显着性水平alpha = 0.05。我们可以得出结论,男性的平均体重与女性的平均体重没有显著不同。
好了,本期讲解就先到这里。小伙伴们赶紧试起来吧。
在之后的更新中,我们会进一步为您介绍R的入门,以及常用生物统计方法和R实现。欢迎关注,投必得医学手把手带您走入R和生物统计的世界。
当然啦,R语言的掌握是在长期训练中慢慢积累的。一个人学习太累,不妨加入“R与统计交流群”,和数百位硕博一起学习。
快扫二维码撩客服,
带你进入投必得医学交流群,
让我们共同进步!
↓↓
- END -
长按二维码关注「投必得医学」,更多科研干货在等你!